// projects/oa/pages/project_resource/research_resource_list.js
const cloudHelper = require('../../../config/project_helpers_config').cloudHelper;
const pageHelper = require('../../../config/project_helpers_config').pageHelper;
const timeHelper = require('../../../config/project_helpers_config').timeHelper;
const ResearchResourceBiz = require('../../../config/path_resolver.js').pageHelper;
const SystemHelper = require('../../../config/path_resolver.js').pageHelper;

Page({

	/**
	 * 页面的初始数据
	 */
	data: {
		projectId: '', // 项目ID
		isLoad: false, // 是否已加载

		// 资源列表相关
		list: [], // 资源列表
		total: 0, // 总数
		currentType: null, // 当前选中的资源类型
		resourceTypes: [], // 资源类型列表

		// 批量操作相关
		isSelectMode: false, // 是否为选择模式
		selectedItems: [], // 已选中的项目
		selectAll: false, // 是否全选
		
		// 批量功能操作状态
		isBatchDownloading: false, // 是否正在批量下载中
		isBatchDeleting: false, // 是否正在批量删除中
		
		// 分页相关
		page: 1, // 当前页码
		size: 20, // 每页数量
		hasMore: true, // 是否还有更多
		isLoading: false // 是否正在加载
	},

	/**
	 * 生命周期函数--监听页面加载
	 */
	onLoad(options) {
		if (!options || !options.projectId) {
			pageHelper.showModal('参数错误', '缺少项目ID');
			return;
		}

		this.setData({
			projectId: options.projectId,
			resourceTypes: this._getResourceTypes()
		});

		this._loadList();
	},

	/**
	 * 生命周期函数--监听页面初次渲染完成
	 */
	onReady() {

	},

	/**
	 * 生命周期函数--监听页面显示
	 */
	onShow() {

	},

	/**
	 * 生命周期函数--监听页面隐藏
	 */
	onHide() {

	},

	/**
	 * 生命周期函数--监听页面卸载
	 */
	onUnload() {
		// 销毁MobX绑定（如果有）
		if (this.storeBindings) {
			try {
				this.storeBindings.destroyStoreBindings();
				console.log('[资源列表] MobX绑定已清理');
			} catch (err) {
				console.error('[资源列表] 清理MobX绑定失败', err);
			}
		}
	},

	/**
	 * 页面相关事件处理函数--监听用户下拉动作
	 */
	onPullDownRefresh() {
		this._loadList();
		wx.stopPullDownRefresh();
	},

	/**
	 * 页面上拉触底事件的处理函数
	 */
	onReachBottom() {
		if (this.data.hasMore && !this.data.isLoading) {
			this._loadList(true);
		}
	},

	/**
	 * 获取资源类型列表
	 */
	_getResourceTypes() {
		return [
			{ value: null, label: '全部' },
			{ value: 'doc', label: '文档' },
			{ value: 'pcb', label: 'PCB' },
			{ value: 'bom', label: 'BOM' },
			{ value: 'software', label: '软件' },
			{ value: 'image', label: '图片' }
		];
	},

	/**
	 * 加载资源列表
	 */
	async _loadList(isAppend = false) {
		if (!this.data.projectId) return;
		if (!isAppend) this.setData({ isLoading: true });

		try {
			const params = {
				projectId: this.data.projectId,
				resourceType: this.data.currentType,
				page: isAppend ? this.data.page : 1,
				size: this.data.size
			};

			const result = await cloudHelper.callCloudData('project_resource/list', params);
			
			// 处理数据
			const list = result.list.map(item => {
				// 格式化添加时间
				if (item.ADD_TIME) {
					item.ADD_TIME_DISPLAY = timeHelper.fmtDateTimeCN(item.ADD_TIME);
				}
				
				// 添加选中状态字段
				item.checked = false;
				
				return item;
			});

			if (isAppend) {
				this.setData({
					list: this.data.list.concat(list),
					total: result.total,
					hasMore: this.data.list.concat(list).length < result.total,
					page: this.data.page + 1,
					isLoad: true,
					isLoading: false
				});
			} else {
				this.setData({
					list,
					total: result.total,
					hasMore: list.length < result.total,
					page: 2,
					isLoad: true,
					isLoading: false,
					selectedItems: [],
					selectAll: false
				});
			}
		} catch (err) {
			console.error('[资源列表] 加载失败:', err);
			if (!isAppend) {
				this.setData({
					list: [],
					total: 0,
					hasMore: false,
					isLoad: true,
					isLoading: false
				});
			}
		}
	},

	/**
	 * 资源类型切换
	 */
	onTypeChange(e) {
		const type = e.currentTarget.dataset.type;
		if (type !== this.data.currentType) {
			this.setData({
				currentType: type
			}, () => {
				this._loadList();
			});
		}
	},

	/**
	 * 进入批量选择模式
	 */
	onEnterSelectMode() {
		this.setData({
			isSelectMode: true,
			selectedItems: [],
			selectAll: false
		});
	},

	/**
	 * 退出批量选择模式
	 */
	onExitSelectMode() {
		this.setData({
			isSelectMode: false,
			selectedItems: [],
			selectAll: false
		});
	},

	/**
	 * 选择/取消选择单个项目
	 */
	onItemSelect(e) {
		const index = e.currentTarget.dataset.index;
		const item = this.data.list[index];
		
		// 更新选中状态
		const list = this.data.list;
		list[index].checked = !list[index].checked;
		
		// 更新选中的项目
		let selectedItems = this.data.selectedItems;
		if (list[index].checked) {
			selectedItems.push(item._id);
		} else {
			selectedItems = selectedItems.filter(id => id !== item._id);
		}
		
		// 更新全选状态
		const selectAll = selectedItems.length === list.length;
		
		this.setData({
			list,
			selectedItems,
			selectAll
		});
	},

	/**
	 * 全选/取消全选
	 */
	onSelectAll() {
		const selectAll = !this.data.selectAll;
		const list = this.data.list.map(item => {
			item.checked = selectAll;
			return item;
		});
		
		const selectedItems = selectAll ? list.map(item => item._id) : [];
		
		this.setData({
			list,
			selectedItems,
			selectAll
		});
	},

	/**
	 * 批量下载资源
	 */
	async onBatchDownload() {
		const { selectedItems } = this.data;
		if (!selectedItems.length) {
			pageHelper.showModal('请选择至少一个资源', '您还没有选择任何资源');
			return;
		}
		
		this.setData({ isBatchDownloading: true });
		
		try {
			// 查询选中资源的详细信息
			const result = await cloudHelper.callCloudData('research/resource_batch_detail', {
				resourceIds: selectedItems
			});
			
			if (!result.list || !result.list.length) {
				throw new Error('获取资源详情失败');
			}
			
			// 下载所有资源
			await this._batchDownloadFiles(result.list);
			
			// 下载完成
			pageHelper.showSuccessToast('下载完成');
			this.onExitSelectMode();
		} catch (err) {
			console.error('[批量下载] 失败:', err);
			pageHelper.showModal('下载失败', err.message || '下载过程中出错');
		} finally {
			this.setData({ isBatchDownloading: false });
		}
	},

	/**
	 * 批量删除资源
	 */
	async onBatchDelete() {
		const { selectedItems } = this.data;
		if (!selectedItems.length) {
			pageHelper.showModal('请选择至少一个资源', '您还没有选择任何资源');
			return;
		}
		
		// 请求用户确认
		const confirm = await pageHelper.showConfirm('确认删除', `确定要删除这 ${selectedItems.length} 个资源吗？删除后无法恢复！`);
		if (!confirm) return;
		
		this.setData({ isBatchDeleting: true });
		
		try {
			// 执行批量删除
			const result = await cloudHelper.callCloudData('project_resource/batch_delete', {
				projectId: this.data.projectId,
				ids: this.data.selectedItems
			});
			
			if (result.deleted === 0) {
				throw new Error('没有资源被删除');
			}
			
			// 删除成功
			pageHelper.showSuccessToast(`成功删除 ${result.deleted} 个资源`);
			
			// 重新加载列表
			this._loadList();
			this.onExitSelectMode();
		} catch (err) {
			console.error('[批量删除] 失败:', err);
			pageHelper.showModal('删除失败', err.message || '删除过程中出错');
		} finally {
			this.setData({ isBatchDeleting: false });
		}
	},

	/**
	 * 批量下载文件
	 * @param {Array} files - 文件列表
	 */
	async _batchDownloadFiles(files) {
		// 微信小程序中批量下载文件的实现
		// 这里简化为一个一个下载
		let maxConcurrent = 1; // 默认值
		
		try {
			// 使用SystemHelper获取应用信息
			const appBaseInfo = await SystemHelper.getAppBaseInfo();
			// 根据环境判断并发数
			maxConcurrent = appBaseInfo.env === 'development' ? 3 : 1; // 开发环境最多三个并发请求
		} catch (error) {
			console.warn('获取系统信息失败，使用默认值', error);
		}
		
		let completed = 0;
		let failed = 0;
		
		// 使用Promise.all和分片来控制并发
		for (let i = 0; i < files.length; i += maxConcurrent) {
			const batch = files.slice(i, i + maxConcurrent);
			const results = await Promise.all(batch.map(file => {
				return new Promise(async (resolve) => {
					try {
						// 执行下载
						await wx.downloadFile({
							url: file.RESOURCE_URL,
							success: (res) => {
								if (res.statusCode === 200) {
									// 保存文件
									wx.saveFile({
										tempFilePath: res.tempFilePath,
										success: () => {
											completed++;
											resolve(true);
										},
										fail: (err) => {
											console.error('保存文件失败', err);
											failed++;
											resolve(false);
										}
									});
								} else {
									failed++;
									resolve(false);
								}
							},
							fail: () => {
								failed++;
								resolve(false);
							}
						});
					} catch (err) {
						failed++;
						resolve(false);
					}
				});
			}));
		}
		
		// 如果有失败的，告知用户
		if (failed > 0) {
			pageHelper.showModal('部分下载失败', `共 ${files.length} 个文件，${completed} 个成功，${failed} 个失败`);
		}
	},

	/**
	 * 预览或查看资源详情
	 */
	onPreviewResource(e) {
		const index = e.currentTarget.dataset.index;
		const item = this.data.list[index];
		if (!item) return;
		
		// 根据文件类型选择不同的操作
		// 图片直接预览，其他类型显示详情
		if (item.RESOURCE_TYPE === 'image' && item.RESOURCE_URL) {
			this._previewImage(item);
		} else {
			// 跳转到资源详情页
			wx.navigateTo({
				url: `./research_resource_detail?id=${item._id}&projectId=${this.data.projectId}`
			});
		}
	},

	/**
	 * 预览图片
	 */
	async _previewImage(item) {
		if (!item.RESOURCE_URL) {
			pageHelper.showModal('预览失败', '找不到图片地址');
			return;
		}
		
		try {
			await wx.previewImage({
				current: item.RESOURCE_URL,
				urls: [item.RESOURCE_URL]
			});
		} catch (err) {
			console.error('[图片预览] 失败:', err);
			pageHelper.showModal('预览失败', '图片加载失败');
		}
	},

	/**
	 * 预览文件
	 */
	async _previewFile(item) {
		if (!item.RESOURCE_URL) {
			pageHelper.showModal('预览失败', '找不到文件地址');
			return;
		}
		
		try {
			pageHelper.showLoading('文件加载中...');
			
			// 下载文件
			const res = await wx.downloadFile({
				url: item.RESOURCE_URL
			});
			
			if (res.statusCode !== 200 || !res.tempFilePath) {
				throw new Error('文件下载失败');
			}
			
			// 打开文件
			await wx.openDocument({
				filePath: res.tempFilePath,
				showMenu: true
			});
			
			pageHelper.hideLoading();
		} catch (err) {
			pageHelper.hideLoading();
			console.error('[文件预览] 失败:', err);
			pageHelper.showModal('预览失败', '文件加载失败或格式不支持');
		}
	},

	/**
	 * 分享
	 */
	onShareAppMessage() {
		return {
			title: '项目资源管理',
			path: '/projects/plm/pages/project/resource/research_resource_list?projectId=' + this.data.projectId
		};
	}
});